python命令行print() flush参数延时打点

2019年1月23日 Jerry 9097 2019年6月22日

最近搞个命令行小程序,需要实现个延时打点,结果研究了半天才搞定。。咋回事呢?!

测试代码很简单,如下:

from time import sleep
from threading import Thread

isDone = False

def itask():
    global isDone
    sleep(7)
    isDone = True

if __name__ == '__main__':
    print("Task is running, please wait", end="")
    Thread(target = itask).start()
    while(True):
        if isDone == False:
            print(".", end="")
            sleep(0.5)
        else:
            print("Done!")
            break

其实就是主线程内新创建了个子线程来处理其他业务,同时打点计时,子进程完成后通过标记位来通知主线程完成。

理想中的效果图如下:

这段程序在Python IDLE里面运行起来没啥问题,但是在windows的命令行里运行起来就不行了。。

可以看到,程序并没有进行打点,而是子线程完成后也就是sleep结束后全部输出。

研究了半天最后发现了print里面有一个flush参数:
flush值为True或者False,默认为Flase,表示是否立刻将输出语句输入到参数file指向的对象中(默认是sys.stdout)。

上述代码中给print添加“flush=True”后就可以完成我要的功能了。

print(".", end="")
修改为
print(".", end="", flush=True)


原创文章,转载请注明出处: https://jerrycoding.com/article/print_flush

微信
jerry微信赞助
支付宝
jerry支付宝赞助

您尚未登录,暂时无法评论。请先 登录 或者 注册

0 人参与 | 0 条评论